/** @format */

import { defineStore } from 'pinia'

// 选中的类型
export const TODO_TYPE = {
	all: 'all', // 所有
	unfinished: 'unfinished', // 未完成
	finished: 'finished' // 已完成
}

// 定义并导出
export const useTodoStore = defineStore('todo', {
	// state: 提供共享的数据
	state: () => ({
		// 记录当前选择的类型， 默认值是 all
		type: TODO_TYPE.all,
		// 共享的代办任务列表
		todos: [
			{ id: 1, text: 'Buy milk', finished: false },
			{ id: 2, text: 'Buy eggs', finished: true },
			{ id: 3, text: 'Buy bread', finished: false }
		]
	}),
	// 计算属性
	getters: {
		// 小选是否全部选中
		isAll: (state) => state.todos.every((item) => item.finished),
		// 所有未完成的todos
		unfinishedTodos: (state) => state.todos.filter((item) => !item.finished),

		// 计算需要展示的todos
		showTodos: (state) => {
			switch (state.type) {
				case TODO_TYPE.all:
					// 返回所有数据
					return state.todos
				case TODO_TYPE.unfinished:
					// 返回所有未完成的
					return state.todos.filter((item) => !item.finished)
				case TODO_TYPE.finished:
					// 返回所有已完成的
					return state.todos.filter((item) => item.finished)
			}
		}
	},
	// 定义修改数据的函数
	actions: {
		// 添加
		addTodo(text) {
			this.todos.push({
				text,
				id: this.todos.length + 1,
				finished: false
			})
		},
		// 删除
		delTodo(i) {
			if (window.confirm('确认删除么')) {
				this.todos.splice(i, 1)
			}
		},
		// 切换状态
		toggleTodo(flag) {
			this.todos.forEach((item) => (item.finished = flag))
		},
		// 清除已完成
		clearTodo() {
			this.todos = this.todos.filter((item) => !item.finished)
		},
		setType(type) {
			this.type = type
		}
	}
})
